home *** CD-ROM | disk | FTP | other *** search
/ Tiger Disk 6 / Tiger_Disk_006_19xx_Tiger-Crew-Disk_de_Side_B.d64 / 7 mk (.txt) < prev    next >
Commodore BASIC  |  2023-02-26  |  7KB  |  165 lines

  1. 8 clr
  2. 10 u$="[197][197][197][197][197][197][197][197][197][197]":o$="[164][164][164][164][164][164][164][164][164]"
  3. 110 poke826,238:poke827,0:poke828,128:poke829,96
  4. 200 print"[147][164][164]";o$;o$;o$;o$:print"syntax-lehrgang 'maschinensprache' (7)
  5. 205 b$[178]"operationen
  6. 210 printo$;o$;o$;"[164][164][164][164][164]":print"1.3.2. arithmetische ";b$;"[146] (ii)
  7. 220 [153]"wir  kennen  bisher  die arithmetischen
  8. 230 printb$;" adc und sbc, also  addition
  9. 240 [153]"und subtraktion.   beide befehle werden
  10. 250 print"jedoch selten benoetigt. viel haeufiger
  11. 260 [153]"sind vergleichs";b$;",   sowie in-
  12. 270 print"krementier- und dekrementierbefehle.
  13. 280 [153]"diese werden wir heute kennenlernen.
  14. 310 i=1:gosub5000:ifflthen200
  15. 400 print"[147]es  gibt   drei  vergleichs";b$;":
  16. 410 [153]"cmp, cpx und cpy. der erste buchstabe c
  17. 420 print"bedeutet bei allen dreien compare, also
  18. 430 [153]"'vergleiche'.   verglichen  werden zwei
  19. 440 print"datenworte (bytes).  der vergleichsvor-
  20. 450 [153]"gang beeinflusst jedoch  nur die flags,
  21. 460 print"keine register.man kann also anhand der
  22. 470 [153]"flags feststellen,   welches der beiden
  23. 480 print"byte groesser war,  oder ob  sie gleich":print"waren.
  24. 500 [153]"beeinflusst werden das n-,z- und c-flag
  25. 510 i=2:gosub5000:ifflthen200
  26. 600 print"[147]das ist wichtig! denken sie z.b. an die
  27. 610 [153]"for/next-schleife in basic: am ende je-
  28. 620 print"des schleifendurchlaufes wird eine ver-
  29. 630 [153]"gleichsoperation durchgefuehrt, die den
  30. 640 print"laufparameter (meist i)  mit einer vor-
  31. 650 [153]"gegebenen oberen grenze vergleicht.  je
  32. 660 print"nach resultat  des vergleichs  wird die
  33. 670 [153]"schleife  ein weiteres mal  durchlaufen
  34. 680 print"oder  nicht.   und die  wichtigkeit der
  35. 690 [153]"for/next-schleife ist ja bekannt.
  36. 740 i=3:gosub5000:ifflthen400
  37. 800 print"[147][164][164][164]":print"cmp[146]: compare memory and accumulator"
  38. 810 print"     [197] [197][197]
  39. 820 [153]"vom ac wird  das adressierte byte  sub-
  40. 830 print"trahiert.der befehl cmp # $0f berechnet
  41. 850 [153]"also die differenz ac-$0f.
  42. 860 print"das ergebnis  dieser subtraktion  steht
  43. 870 [153]"aber im gegensatz zu sbc  anschliessend
  44. 880 print"nicht im ac.  es taucht auch  in keinem":print"[197][197][197][197][197]
  45. 890 [153]"anderen speicher auf! nur die flas n,z,
  46. 900 print"und c veraendern  entsprechend der sub-
  47. 910 [153]"traktion ihren wert.  der inhalt des ac
  48. 920 print"ist vor und nach dem befehl cmp gleich.
  49. 930 i[178]4:[141]5000:[139]fl[167]600
  50. 1000 [153]"loadtototo":[153]"cpxwait: compare memory and x-register
  51. 1010 print"     [197]  [197]";spc(15);"[197]
  52. 1020 a$[178]"dasselbe wie cmp, nur wird das byte vom":[153]a$
  53. 1030 [153]"x";:b$[178]"r anstatt vom ac subtrahiert.":[153]b$
  54. 1040 [153]"tototo":[153]"cpywait: compare memory and y-register
  55. 1050 print"     [197]  [197]";spc(15);"[197]":printa$:print"y";:printb$
  56. 1080 print"auch die befehle cpx und cpy beeinflus-
  57. 1090 [153]"sen nur die flags n/z/c,   nicht jedoch
  58. 1100 print"den inhalt des xr oder yr.
  59. 1130 i[178]5:[141]5000:[139]fl[167]800
  60. 1200 [153]"loaddie inkrementierbefehle:":[153]u$;u$;"valvalval
  61. 1210 print"[164][164][164]":print"inc[146] increment memory by one":print"    [197][197][197]
  62. 1220 [153]"der inhalt  des adressierten  speichers
  63. 1230 a$="wird um eins erhoeht.":printa$;:print"  z.b. erhoeht der
  64. 1240 [153]"befehl  inc $0123  den inhalt des spei-
  65. 1250 print"chers $0123 um 1. aus $00 wird $01, aus
  66. 1260 [153]"$aa wird $ab, aus $ff wird $00 (!).
  67. 1270 print"[164][164][164]":print"inx[146] increment xr by one":print"    [197][197]";spc(8);"[197]
  68. 1280 b$[178]"der inhalt des ":[153]b$;"xr ";a$
  69. 1290 [153]"tototo":[153]"inywait increment yr by one":[153]"    valval";[166]8);"val
  70. 1300 printb$;"yr ";a$
  71. 1320 i=6:gosub5000:ifflthen1000
  72. 1400 print"[147]alle drei  inkrementier-befehle  beein-
  73. 1410 [153]"flussen die flags n und z.das bedeutet:
  74. 1420 print"wurde das adressierte byte, bzw. das xr
  75. 1430 [153]"oder yr beim  inkrementieren null  (ne-
  76. 1440 print"gativ),so wird das z (n) -flag gesetzt.
  77. 1450 [153]"auch das inkrementieren ist uns aus der
  78. 1455 print"for/next-schleife wohlbekannt:  am ende
  79. 1460 [153]"des schleifendurchlaufes wird der lauf-
  80. 1470 print"index automatisch um 1 erhoeht.
  81. 1510 i[178]7:[141]5000:[139]fl[167]1200
  82. 1600 [153]"loaddie dekrementierbefehle":[153]u$;u$;"valvalval
  83. 1610 print"[164][164][164]":print"dec[146] decrement memory by one":print"    [197][197][197]
  84. 1620 [153]b$;" adressierten  speichers
  85. 1630 print"wird um eins erniedrigt,z.b. erniedrigt
  86. 1640 [153]"der befehl  'dec $0123' den  inhalt des
  87. 1650 print"speichers $0123 um 1. aus $ab wird $aa,
  88. 1660 [153]"aus $01 wird $00, aus $00 wird $ff (!).
  89. 1670 print"[164][164][164]":print"dex[146] decrement xr by one":print"    [197][197]";spc(8);"[197]
  90. 1680 [153]b$;"xr ";:a$[178]"wird um 1 erniedrigt.":[153]a$
  91. 1690 [153]"tototo":[153]"deywait decrement yr by one":[153]"    valval";[166]8);"val
  92. 1700 printb$;"yr ";:printa$
  93. 1710 i=8:gosub5000:ifflthen1400
  94. 1800 print"[147]ebenso  wie die inkrementierbefehle be-
  95. 1810 [153]"einflussen  die dekrementierbefehle nur
  96. 1820 print"die flags n und z.  die dekrementierbe-
  97. 1830 [153]"fehle  sind also   die genaue umkehrung
  98. 1840 print"der inkrementierbefehle.
  99. 1850 [153]"denken sie   an for/next-schleifen  mit
  100. 1855 print"'step-1', dann wird ihnen die bedeutung
  101. 1860 [153]"der dekrementierbefehle klar.
  102. 1910 i=9:gosub5000:ifflthen1600
  103. 2000 print"[147]beispiele:":printu$
  104. 2005 print"1. es mag  zuerst unsinnig  erscheinen,
  105. 2010 [153]"dass bei cmp/cpx/cpy  das subtraktions-
  106. 2015 print"ergebnis verloren geht. da dadurch aber
  107. 2020 [153]"das zu vergleichende byte im ac (xr,yr)
  108. 2030 print"erhalten bleibt,kann man beliebig viele
  109. 2040 [153]"solche vergleiche direkt hintereinander
  110. 2050 print"durchfuehren, ohne das zu vergleichende
  111. 2055 [153]"byte stets wieder neu in den ac (xr,yr)
  112. 2060 print"laden zu muessen.
  113. 2110 i[178]10:[141]5000:[139]fl[167]1800
  114. 2200 [153]"load2. neben  dem verlust   des ergebnisses
  115. 2210 print"unterscheiden sich cmp und sbc  noch im
  116. 2220 [153]"verhalten auf des c-flag:  vor cmp muss
  117. 2230 print"das c-flag nicht gesetzt werden.
  118. 2240 [153]"3. als schleifenzaehler  verwendet  man
  119. 2250 print"meist das xr oder das yr.   die befehle
  120. 2260 [153]"inx/iny bzw. dex/dey machen das zaehlen
  121. 2270 print"mit  diesen   indexregistern  besonders
  122. 2280 [153]"einfach.
  123. 2310 i=11:gosub5000:ifflthen2000
  124. 2400 print"[147]aufgaben:":printu$
  125. 2410 print"1. was fuer eine adressierungsart haben
  126. 2420 [153]"die befehle inx/iny/dex/dey stets?
  127. 2430 print"2. wieviele byte haben sie daher stets?
  128. 2440 [153]"3. im ac stehe das datenwort $01.  wel-
  129. 2450 print"ches flag  wird durch den folgenden be-
  130. 2460 [153]"fehl gesetzt: cmp # $01 ?
  131. 2470 print"4. und welches,wenn der ac $00, welches
  132. 2480 [153]"wenn er $02 enthaelt ?
  133. 2510 i=12:gosub5000:ifflthen2200
  134. 2600 print"[147]5. die aufgaben  3 und  4 sind wichtig.
  135. 2620 [153]"falls sie sie  nicht bearbeitet  haben,
  136. 2630 print"blaettern sie nochmal zurueck!
  137. 2640 [153]"6. der speicher $8000 enthaelt das zei-
  138. 2650 print"chen  in der linken  oberen bildschirm-
  139. 2660 [153]"ecke.  schreiben sie ein programm,  das
  140. 2670 print"diesen speicher inkrementiert.vergessen
  141. 2680 [153]"sie nicht rts!   rufen sie es  mehrfach
  142. 2690 print"hintereinander auf   und beobachten sie
  143. 2700 [153]"den bildschirm.
  144. 2710 i=13:gosub5000:ifflthen2400
  145. 2800 print"[147]a
  146. 2805 [153]"die loesung von aufgabe 6  steht ab 826
  147. 2810 print"im ram. sie koennen sie aufrufen.
  148. 2820 [153]"zur demonstration fuehren wir sie ihnen
  149. 2830 print"vor. beachten sie die linke obere bild-
  150. 2840 [153]"schirmecke!
  151. 2842 forw=0to10000:next
  152. 2850 fori=0to255
  153. 2860 sys826
  154. 2870 forw=0to150
  155. 2880 nextw,i
  156. 2910 print"  - seite 14 -  <+> [145][164][164][164][164][157][157][157][157]ende[146]  <-> von vorne";
  157. 3060 gosub5020:onflgoto0:print"[147]":end:run
  158. 5000 rem umblaettern
  159. 5010 print"  - seite";i;"-  <+> weiter  <-> zurueck";
  160. 5020 fori=0to11:getx$:next
  161. 5030 getx$:ifx$=""then5030
  162. 5040 ifx$="+"thenfl=0:return
  163. 5050 ifx$="-"thenfl=1:return
  164. 5060 goto5030
  165.